﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Text.RegularExpressions;
using System.IO;

namespace ServerApp
{
   public class SendFileUDP
    {
        public string RecevieFileName()
        {
            string filename = "";

            //dùng để chuyển ký tự về chuổi
            ASCIIEncoding utf8 = new ASCIIEncoding();
            int Size = 1024;// ký thước để nhận dữ liệu
            int port = 8080; // port 
            //    MessageBox.Show("Server kết nối........");
            // tạo socket sữ dụng giao thức UPD
            IPEndPoint ipendp = new IPEndPoint(IPAddress.Any, port);
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            //Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            //s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
            ///  MessageBox.Show("Đã kết nối từ " + s.RemoteEndPoint);
            // tạo chỗ để chứa liệu để nhận 
            byte[] data = new byte[Size];
            //tạo ra một đối tượng chứa địa chỉ host và port
            IPEndPoint Address_Ip = new IPEndPoint(IPAddress.Any, port);
            // mở kết nối với địa chỉ host và ip
            s.Bind(ipendp);
            EndPoint remoteEP = Address_Ip;
            // lắng nghe client gởi giử liệu qua
            int BytesRecevied = s.Receive(data);// s.ReceiveFrom(data, ref remoteEP);
            // chuyển dữ liệu đã nhận từ dạng ký tự sang chuổi
            string chuoi = utf8.GetString(data);//System.Text.ASCIIEncoding.ASCII.GetString(data);
            string[] a = Regex.Split(chuoi, "\0");

            filename = a[0];
            s.Close();
            
            return filename;


        }
        public int ReceiveContentfileUDP(string filename)
        {
            int kq = 0;
            ASCIIEncoding utf8 = new ASCIIEncoding();
           // int Size =1024;// ký thước để nhận dữ liệu
            //int size = 1400;
            // change to file size 165kb
            int Size = 165 * 1024;
            int port = 8080; // port 
          //  String path = @"d:\" + filename;
            String path = @"d:\nhu.ppt";
            // MessageBox.Show("Server kết nối........");
            //IPEndPoint Address_Ip = new IPEndPoint(IPAddress.Any, port);
            //Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            //s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
            //EndPoint remoteEP = Address_Ip;
            

            // MessageBox.Show("Đã kết nối từ " + s.RemoteEndPoint);
            IPEndPoint ipendp = new IPEndPoint(IPAddress.Any, port);
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            s.Bind(ipendp);
            bool kt = false;
            FileStream fs = new FileStream(path, FileMode.Create);
            byte[] data = new byte[Size];
            while (!kt)
            {

              
              
                for (int i = 0; i < data.Length; i++)
                {
                    data[i] = 0;
                }

                // lắng nghe client gởi giử liệu qua
                int flag = s.Receive(data);
                if (flag < Size)
                {
                   fs.Write(data, 0, flag);
                    kq++;
                    kt = true;
                }
                else
                {
                    fs.Write(data, 0, data.Length);
                    kq++;
                }
               
               
            }
            s.Close();
            fs.Close();
          
            return kq;
        }
    }
   }
